package com.tbit.uqbike.webmanager.dao.stat;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.tbit.config.datasource.DataSource;
import com.tbit.uqbike.object.pojo.statistics.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @Author HZW
 * @ClassName ReconciliationDao
 * @Description 对账数据dao层
 * @date 2022/3/28 11:36
 * @Version 1.0
 */
@DS(DataSource.STAT)
public interface ReconciliationDao {

    /**
     * 根据区域id获取区域对账数据日统计
     *
     * @param accountId 帐户id
     * @return {@link AccountDataDaySta}
     */
    AccountDataDaySta getDateByAccount(Integer accountId);

    /**
     * 获取区域数据日统计最早的时间
     *
     * @param brandId 品牌标识
     * @return {@link AccountDataDaySta}
     */
    AccountDataDaySta getEarlyDateByAccount(Integer brandId);

    /**
     * 修改区域预统计添加时间
     *
     * @param accountDataDaySta sta帐户数据一天
     */
    void updateDate(AccountDataDaySta accountDataDaySta);


    /**
     * 插入对账区域数据记录
     *
     * @param accountDataDaySta sta帐户数据一天
     * @return int
     */
    int insertAccountData(AccountDataDaySta accountDataDaySta);

    /**
     * 添加帐户数批量处理
     *
     * @param list 列表
     * @return int
     */
    int addBatchAccountData(List<AccountDataDaySta> list);

    /**
     * 根据品牌id获取品牌对账数据日统计
     *
     * @param brandId 品牌标识
     * @return {@link BrandDataDaySta}
     */
    BrandDataDaySta getBrandEarliestData(Integer brandId);

    /**
     * 修改品牌预统计添加时间
     *
     * @param brandDataDatSta 品牌数据dat sta
     */
    void updateBrandData(BrandDataDaySta brandDataDatSta);

    /**
     * 根据品牌id和日期查询区域预数据
     *
     * @param map 地图
     * @return {@link List}<{@link BrandDataDaySta}>
     */
    List<AccountDataDaySta> getDataByBrandId(Map<String, Object> map);


    /**
     * 插入品牌预统计数据
     *
     * @param brandDataDaySta 品牌数据天sta
     * @return int
     */
    int insertBrandData(BrandDataDaySta brandDataDaySta);

    /**
     * 批量添加品牌数据
     *
     * @param list 列表
     * @return int
     */
    int addBatchBrandData(List<BrandDataDaySta> list);

    /**
     * 获取最近数据的日期
     *
     * @param accountId 帐户id
     * @return {@link String}
     */
    AccountDataMonthSta getRecentlyDate(Integer accountId);

    /**
     * 获取区域月统计数据
     *
     * @param map 地图
     * @return {@link List}<{@link AccountDataDaySta}>
     */
    List<AccountDataDaySta> getMonthDate(Map<String, Object> map);

    /**
     * 得到区域内月统计数据
     *
     * @param map 地图
     * @return {@link List}<{@link AccountDataDaySta}>
     */
    List<AccountDataMonthSta> getAreaDate(Map<String, Object> map);

    /**
     * 得到区域时间内月统计数据
     *
     * @param map 地图
     * @return {@link List}<{@link AccountDataDaySta}>
     */
    List<MonthDateType> selectDataByArea(Map<String, Object> map);

    /**
     * 获取品牌区域时间月统计数据
     *
     * @param map 地图
     * @return {@link List}<{@link AccountDataDaySta}>
     */
    List<BrandDataDaySta> getBrandMonthDate(Map<String, Object> map);

    /**
     * 批量添加对账月预统计
     *
     * @param accountDataDaySta 品牌数据月sta
     * @return int
     */
    int addBatch(@Param("list") List<AccountDataDaySta> accountDataDaySta);

    /**
     * 更新区域月统计
     *
     * @param brandDataMonthSta 品牌数据月sta
     * @return int
     */
    int updateBrandMonth(AccountDataMonthSta brandDataMonthSta);

    /**
     * 最近日期品牌流水的数据
     *
     * @param brandId 品牌标识
     * @return {@link List}<{@link BrandSerialDaySta}>
     */
    BrandSerialDaySta getRecentlyDateByBrand(Integer brandId);

    /**
     * 插入资金流水预统计
     *
     * @param brandSerialDaySta
     * @return int
     */
    int insertSerial(BrandSerialDaySta brandSerialDaySta);

    /**
     * 查询时间内的资金流水记录
     *
     * @param map
     * @return {@link List}<{@link BrandSerialDaySta}>
     */
    List<BrandSerialDaySta> selectSerialDate(Map<String, Object> map);


    /**
     * 查询时间内的订单时间类型数据
     *
     * @param map 地图
     * @return {@link List}<{@link MonthDateType}>
     */
    MonthDateType selectMonthDateType(Map<String, Object> map);

    /**
     * 批量插入订单时间类型数据
     *
     * @param monthDateTypes 月日期类型
     * @return int
     */
    int insertMonthDateType(@Param("list") List<MonthDateType> monthDateTypes);

    /**
     * 修改订单时间类型数据的添加时间
     *
     * @param monthDateType 月日期类型
     * @return int
     */
    int updateMonthDateType(MonthDateType monthDateType);

    /**
     * 获得优惠券收入
     *
     * @param params 参数个数
     * @return {@link AccountDataDaySta}
     */
    AccountDataDaySta getCouponIncome(Map<String, Object> params);
}
